// main.js
// const { createApp } = require('vue')
//这里有错误
// const { App } =require('./src/renderer/App.vue')  
const { app, BrowserWindow, ipcMain, screen,Menu, dialog } = require('electron');

const path = require('path');

// main.js 顶部
const Store = require('electron-store').default;


// 创建 Vue 应用并挂载到 #app 元素上
// createApp(App).mount('#app')


console.log('[Store]', Store, typeof Store) // 应该是 function
//new Store()创建一个配置对象，用于保存用户配置,参数包括默认值、配置文件名等
const conf = new Store();


//console.log('[Store]', Store, typeof Store) // 应该是 function


// 暴露给渲染进程，这里的_,k分别代表参数，_代表无用参数，k代表参数名，v代表参数值，这里的conf代表配置对象
ipcMain.handle('get-conf', (_, k) => conf.get(k));
ipcMain.handle('set-conf', (_, k, v) => conf.set(k, v));

let win;
function createDock() {
  // getPrimaryDisplay()代表主显示器的工作区域大小，.workAreaSize代表工作区域的宽高
  //screen.getPrimaryDisplay()返回的信息格式是{workAreaSize: {width: 1920, height: 1080}}，加上.workAreaSize就会变成
  const { width, height } = screen.getPrimaryDisplay().workAreaSize;
  //解释代码：new BrowserWindow代表创建一个浏览器窗口
  // 1. 主显示器的工作区域大小
  // 2. 工作区域的宽高
  // 3. 工作区域的宽度
  // 4. 工作区域的高度
  win = new BrowserWindow({
    width,
    height: 280,
    x: 0,
    y: height -280,
    //是否显示窗口边框
    frame: true,
    transparent: true,
    //是否显示窗口任务栏图标
    skipTaskbar: true,
    alwaysOnTop: true,
    resizable: true,
    //backgroundColor: '#1F1F1F50', // 窗口背景色，#RRGGBBAA，最后两位是透明度
    backgroundColor: '#8D879000',
    webPreferences: {//
      // 预加载脚本，用于安全暴露 API
      preload: path.join(__dirname, 'preload.js'),
      // 开启上下文隔离，防止渲染进程直接访问 Node
      contextIsolation: true,
      // 关闭 Node 集成，进一步提高安全性
      nodeIntegration: false
    }
  });
  //// 1. 读变量
  // 2. 变量不存在才拼本地文件
  win.loadURL(
    //这里的??代表如果前面有值就用前面的值，如果没有值就用后面的值
    process.env.VITE_DEV_SERVER_URL || `file://${path.join(__dirname, 'dist/index.html')}`
  )
}
// 当 Electron 完成初始化并准备创建浏览器窗口时调用
app.whenReady().then(createDock);

// 允许渲染进程动态改 Dock 位置
ipcMain.handle('move-dock', (_, pos) => {
  const { width, height } = screen.getPrimaryDisplay().workAreaSize;
  switch (pos) {
    case 'bottom':
      //setBounds 设置窗口位置和大小
      win.setBounds({ x: 0, y: height - 280, width, height: 280 });
      break;
    case 'left':
      win.setBounds({ x: 0, y: 0, width: 80, height });
      break;
    case 'right':
      win.setBounds({ x: width - 80, y: 0, width: 80, height });
      break;
  }
});

// main.js
let previewWin = null;

// 创建预览窗
function createPreview(parentBounds, imgPath) {
  //如果预览窗存在，先关闭
  if (previewWin) previewWin.close();

  const { screen } = require('electron');
  const { width, height } = screen.getPrimaryDisplay().workAreaSize;

  previewWin = new BrowserWindow({
    width: 280,
    height: 160,
    x: parentBounds.x + Math.floor((parentBounds.width - 280) / 2),
    y: parentBounds.y - 170,            // 在图标上方
    frame: false,
    transparent: true,
    alwaysOnTop: true,
    skipTaskbar: true,
    resizable: false,
    webPreferences: {
      nodeIntegration: false,
      contextIsolation: true,
      preload: path.join(__dirname, 'preload.js')
    }
  });

  // 预览页只放一张图，后期可换成实时 canvas
  //loadFile 是 Electron 专门加载本地 HTML 文件的 API。

  previewWin.loadFile(path.join(__dirname, 'preview.html'), { query: { img: imgPath } });

  previewWin.on('closed', () => { previewWin = null; });
}

// 关闭预览窗
function closePreview() {
  if (previewWin) { previewWin.close(); previewWin = null; }
}

// 暴露给渲染进程
ipcMain.handle('show-preview', (_, bounds, img) => createPreview(bounds, img));
ipcMain.handle('hide-preview', closePreview);

// 右键菜单
// 监听右键菜单事件
ipcMain.handle('show-item-menu', (event, item) => {
  const menu = Menu.buildFromTemplate([
    { label: `打开 ${item.name}`, click: () => console.log('打开') },
    { label: '从 Dock 移除', click: () => console.log('移除') }
  ])
  menu.popup({ window: win })
})


ipcMain.handle('show-dock-menu', () => {
  const menu = Menu.buildFromTemplate([
    { label: '任务栏设置', click: openSettings },
    { label: '锁定任务栏', type: 'checkbox', checked: true },
    { label: '任务管理器', click: () => console.log('任务管理器') },
    { label: '显示桌面', click: () => console.log('显示桌面') },
    {
      label: '模式设置',
      submenu: [
        { label: '高效模式', click: () => console.log('高效模式') },
        { label: 'Dock 模式', click: () => console.log('Dock 模式') }
      ]
    }
  ])
  menu.popup({ window: win })
})